1
L'enquête sur les performances
DSAI2202Lab 8: Composing Data Operations

L'équipe de soutien académique a besoin d'une liste des inscriptions actives dont les performances récentes ont baissé. Comparez chaque étudiant à ses propres performances antérieures dans le même cours.

S'accorder sur les règles

  1. Utilisez deux périodes : antérieure et récente. Chacune comporte deux évaluations pondérées de manière égale.
  2. Exigez au moins deux scores non NULL dans chaque période avant de comparer les moyennes.
  3. Calculez decline_points = earlier_avg - recent_avg.
  4. Une baisse d'au moins 15 points signifie Review. Sinon, une inscription éligible a No alert.
  5. Gardez Insufficient data séparé. Un zéro est un score valide ; un NULL ou un enregistrement manquant n'est pas un zéro.

Préparez votre base de données

Ouvrez le fichier fourni lab8_setup.sql depuis le dossier du chargé de TD DSAI2202/lab8/ dans pgAdmin et exécutez le fichier complet. Réutilisez le paramètre de connexion à droite chaque fois que vous ouvrez une nouvelle connexion.

La configuration fournit également performance_comparison, une requête enregistrée appelée vue. Elle servira aux exercices ultérieurs ; ce n'est pas une table supplémentaire de résultats d'évaluation stockés.

✍️ Inspectez avant de calculer
Inspectez E01, E07, E08, E09 et E24. Déterminez lesquels ont suffisamment de scores dans les deux périodes. Expliquez pourquoi les zéros de E24 constituent des preuves plus solides que les valeurs NULL de E08.
Définir le schéma
SET search_path TO lab8;
Vérifier les comptes
SET search_path TO lab8;

SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;
Inspecter les preuves
SET search_path TO lab8;

SELECT e.enrolment_id, e.student_id, e.course_code,
       r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
  ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;